#include <stdio.h>

//符合尾递归优化
void f()
{
    static unsigned long cnt = 0;
    cnt++;
    printf("%lu\n",cnt);
    f();
}

//不符合尾递归优化
void f1()
{
    static unsigned long cnt = 0;
    cnt++;
    printf("%lu\n",cnt);
    f();
    printf("%lu\n",cnt);
}

//  下面函数符合尾递归优化
int sum(int n,int r)
{
    if(n == 1) return r-1;
    return sum(n-1,r+n);
}
//不符合尾递归优化
int sum(int n,int r)
{
    if(n == 1) return r-1;
    return sum(n-1,r+n)+n;
}

int main()
{
    //f();
    return 0;
}

//  解决栈溢出的办法:
//  基于尾递归的优化（编译器）
//  gcc -O2 源文件名 至少要2级优化